package gold.gold01;

import java.util.LinkedList;
import java.util.List;
import java.util.Stack;

/**
 * 中等， 有点乱，但是好像没啥意思
 * 36, 时间都差不多
 * 一次对Stack类的使用, Stack不是一个接口或者抽象类, 继承自vector, 就直接使用就可以了, 感觉并不常用, 可以用deque
 * 注意push的时候先新增栈再塞元素(防止空栈), pop的时候先pop再删除栈(防止空栈), 两个顺序不能错。
 */
public class S0303堆盘子 {
    private int height = 0;
    private List<Stack<Integer>> stacks = new LinkedList<>();
    public S0303堆盘子(int cap) {
        this.height = cap;
    }

    public void push(int val) {
        if(stacks.size() == 0){
            stacks.add(new Stack<>());
            stacks.get(0).push(val);
        }else{
            if(stacks.get(stacks.size() - 1).size() == height)
                stacks.add(new Stack<>());
            stacks.get(stacks.size() - 1).push(val);
        }
    }

    public int pop() {
        if(stacks.size() == 0 || height == 0) return -1;
        int temp1 = stacks.get(stacks.size() - 1).pop();
        if(stacks.get(stacks.size() - 1).size() == 0)
            stacks.remove(stacks.size() - 1);

        return temp1;
    }

    public int popAt(int index) {
        if(stacks.size() == 0 || stacks.size() < index+1 || height == 0) return -1;
        int temp1 = stacks.get(index).pop();
        if(stacks.get(index).size() == 0)
            stacks.remove(index);
        return temp1;
    }
}


